package tests;

import common.Utils;
import org.openqa.selenium.By;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ASUS
 * Date: 2025-04-28
 * Time: 11:22
 */
/*
注册功能测试
 */
public class RegisterPage extends Utils {
    public static String url = "http://127.0.0.1:58080/sign-up.html";
    public RegisterPage() {
        super(url);
    }
    // 检查注册页面是否正常打开
    public void ReqisterPageRight() {
        // 获取界面元素
        String title = driver.findElement(By.cssSelector("#signUpForm > div > h2")).getText();
        // 通过断言判断界面是否加载啊成功
        assert title.equals("用户注册");
    }

    /*
    部分按钮测试
     */

    // 测试显示/隐藏密码的按钮是否正常
    // 因为前端获取不到文本信息, 所以自动化代码无法测试, 但是肉眼可以观察到这个功能正常
    public void GitContent() throws InterruptedException {
        // 在密码输入框输入密码
        driver.findElement(By.cssSelector("#password")).sendKeys("1122");
        // 点击隐藏/显示密码 按钮
        driver.findElement(By.cssSelector("#signUpForm > div > div:nth-child(4) > div > span")).click();

        Thread.sleep(2000);
        // 获取密码
        String passwardShow = driver.findElement(By.cssSelector("#password")).getText();
        // 断言判断
        assert passwardShow.equals("1122");
//        System.out.println(passwardShow);
//        System.out.println("1");
    }

    // 返回登录按钮测试
    public void ReqisterReturnLogin() {
        // 点击登录按钮
        driver.findElement(By.cssSelector("body > div > div > div.text-center.text-muted.mt-3 > a")).click();
        // 通过断言判断是否成功返回
        String loginUrl = driver.getCurrentUrl();
        assert loginUrl.equals("http://127.0.0.1:58080/sign-in.html");
    }

    /*
    注册功能测试
     */
    // 注册成功
    // 注册用户名每次测试都需要更改
    public void RegisterSuc() throws InterruptedException {
        // 返回注册页面操作
        driver.navigate().back();
        // 刷新页面, 确保输入框无内容
        driver.navigate().refresh();
        // 输入正确的用户名
        driver.findElement(By.cssSelector("#username")).sendKeys("ceshi1.3");
        // 输入正确的昵称
        driver.findElement(By.cssSelector("#nickname")).sendKeys("ceshi13");
        // 输入正确的密码
        driver.findElement(By.cssSelector("#password")).sendKeys("111");
        // 输入真确的确认密码
        driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("111");
        // 勾选同意按钮
        driver.findElement(By.cssSelector("#policy")).click();
        // 点击注册
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        // 获取界面 url
        String loginUrl = driver.getCurrentUrl();
        // 断言检测是否跳转到登录页面
        assert loginUrl.equals("http://127.0.0.1:58080/sign-in.html");
    }

    // 注册失败 (用户名为空)
    public void RegisterNoUserName() {
        // 重新返回注册页进行操作
        driver.navigate().back();
        // 刷新页面, 确保输入框无内容
        driver.navigate().refresh();
        // 在用户名输入框输入空
        driver.findElement(By.cssSelector("#username")).sendKeys("");
        // 需要点击一下页面之后才会出现提示
        driver.findElement(By.cssSelector("#submit")).click();
        // 获取输入框下的提示信息
        String tip1 = driver.findElement(By.cssSelector("#signUpForm > div > div:nth-child(2) > div")).getText();
        // 断言检测提示信息是否为"用户名不能为空"
        assert tip1.equals("用户名不能为空");
    }

    // 注册失败 (昵称为空)
    public void RegisterNoNickName() {
        // 刷新页面, 确保输入框无内容
        driver.navigate().refresh();
        // 在昵称输入框输入空
        driver.findElement(By.cssSelector("#nickname")).sendKeys("");
        // 需要点击一下页面之后才会出现提示
        driver.findElement(By.cssSelector("#submit")).click();
        // 获取输入框下的提示信息
        String tip1 = driver.findElement(By.cssSelector("#signUpForm > div > div:nth-child(3) > div")).getText();
        // 断言检测提示信息是否为"昵称不能为空"
        assert tip1.equals("昵称不能为空");
    }
    // 注册失败 (密码为空)
    public void RegisterNoPassword () {
        // 刷新页面, 确保输入框无内容
        driver.navigate().refresh();
        // 在密码输入框中输入空
        driver.findElement(By.cssSelector("#password")).sendKeys("");
        // 点击一下页面
        driver.findElement(By.cssSelector("#submit")).click();
        // 获取输入框下的提示信息
        String tip2 = driver.findElement(By.cssSelector("#signUpForm > div > div:nth-child(4) > div > div")).getText();
        // 断言检测是否为"密码不能为空"
        assert tip2.equals("密码不能为空");
    }

    // 注册失败 (确认密码不正确)
    public void RegisterPasswordAdmitFailuer() {
        // 刷新页面
        driver.navigate().refresh();
        // 在密码输入框中输入正确的密码
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 在确认密码框输入与原密码不同的密码
        driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("12");
        // 点击一下页面
        driver.findElement(By.cssSelector("#submit")).click();
        // 获取输入框下的提示信息
        String tip3 = driver.findElement(By.cssSelector("#signUpForm > div > div:nth-child(5) > div > div")).getText();
        // 断言检测是否为"请检查确认密码"
        assert tip3.equals("请检查确认密码");
    }

    // 注册失败 (未勾选同意协议框)
    public void RegisterNoAgreeAccord() {
        // 刷新界面, 确保输入框为空
        driver.navigate().refresh();
        // 在用户名输入框输入正确的用户名
        driver.findElement(By.cssSelector("#username")).sendKeys("ceshi2");
        // 在昵称输入框输入真确的昵称
        driver.findElement(By.cssSelector("#nickname")).sendKeys("ceshi2.0");
        // 在密码输入框输入正确的密码
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 在确认密码输入框输入正确的密码
        driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");
        // 点击注册
        driver.findElement(By.cssSelector("#submit")).click();
        // 获取页面 url
        String registerUrl = driver.getCurrentUrl();
        // 断言检查是否为注册界面的url, 以此判断不勾选同意协议框是否能注册成功
        assert registerUrl.equals("http://127.0.0.1:58080/sign-up.html");
    }
}
